/*
    两个线程执行相同的任务 给 n 累加 1000 次 在主线程中打印 n 的值
*/

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

int n = 100;
//互斥锁
pthread_mutex_t mut;

void* task(void* avg);

int main(int argc, char* argv[])
{
    pthread_t tid1, tid2,tid3;
    //初始化互斥锁
    //参数要初始化的锁，参数2 互斥锁的属性
    pthread_mutex_init(&mut, NULL);

    pthread_create(&tid1, NULL, task, NULL);
    pthread_create(&tid2, NULL, task, NULL);
    pthread_create(&tid3, NULL, task, NULL);
    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);
    pthread_join(tid3, NULL);
    
    //销毁互斥锁
    pthread_mutex_destroy(&mut);
    printf("%d\n", n);
    return 0;
}

void* task(void* avg)
{
    while(n > 0)
    {
        //上锁
        pthread_mutex_lock(&mut);
        if(n <= 0)
        {
            pthread_mutex_unlock(&mut);
            pthread_exit(NULL);
        }
        printf("%ld 售出 %d 号票！\n", pthread_self(), n--);
        //解锁
        //释放 cpu 时间片 线程主动从运行到就绪状态
        pthread_mutex_unlock(&mut);
        sched_yield();
    }
}
